<?php

namespace app\admin\model;

class Administrator
{
	protected $model;
	public function __construct()
	{
		$this->model = new \app\model\Administrator();
	}
	/**
	 * 检测用户名是否存在
	 * @param string $username 用户名
	 * @return bool
	 */
	public static function checkUsername(string $username): bool
	{
		return \app\model\Administrator::where('username', $username)->count() > 0;
	}
	/**
	 * 检测邮箱是否存在
	 * @param string $email 邮箱
	 * @return bool
	 */
	public static function checkEmail(string $email): bool
	{
		return \app\model\Administrator::where('email', $email)->count() > 0;
	}
	/**
	 * 检测手机号是否存在
	 * @param string $phone 手机号
	 * @return bool
	 */
	public static function checkMobile(string $phone): bool
	{
		return \app\model\Administrator::where('phone', $phone)->count() > 0;
	}
	/**
	 * 根据令牌获取用户信息
	 *
	 * 该方法用于从用户表中检索与给定令牌匹配的用户记录
	 * 默认情况下，它会返回用户的所有字段，但也可以通过$field参数指定返回特定字段
	 *
	 * @param string $token 用户的令牌，用于识别用户
	 * @param string $field 要返回的字段，默认为'*'，表示返回所有字段
	 * @return mixed 根据$token和$tokenField参数，返回相应的用户信息或null
	 */
	public static function getUserByToken(string $token, string $field = '*')
	{
	    // 调用通用的获取用户方法，传入令牌作为查询条件
	    return self::getUserByWhere(['token' => $token], $field);
	}
	/**
	 * 根据用户名获取用户信息
	 * @param string $username 用户名
	 * @return mixed 返回查询到的用户信息，如果没有找到匹配的记录则返回null
	 *                具体返回类型是一个关联数组，包含用户的相关字段和值
	 */
	public static function getUserByUsername(string $username, string $field = '*')
	{
		return self::getUserByWhere(['username' => $username], $field = '*');
	}
	/**
	 * 根据邮箱获取用户信息
	 * @param string $email 邮箱
	 * @return mixed 返回查询到的用户信息，如果没有找到匹配的记录则返回null
	 *                具体返回类型是一个关联数组，包含用户的相关字段和值
	 */
	public static function getUserByEmail(string $email, string $field = '*')
	{
		return self::getUserByWhere(['email' => $email], $field = '*');
	}
	/**
	 * 根据手机号获取用户信息
	 * @param string $phone 手机号
	 * @return mixed 返回查询到的用户信息，如果没有找到匹配的记录则返回null
	 */
	public static function getUserByMobile(string $phone, string $field = '*')
	{
		return self::getUserByWhere(['phone' => $phone], $field = '*');
	}
	/**
	 * 根据条件获取用户信息
	 *
	 * 本方法通过指定的条件和字段从Users模型中查询并返回用户信息
	 * 主要用于需要根据特定条件获取用户数据的场景，例如登录验证或用户信息查询
	 *
	 * @param mixed $where 查询条件数组，用于指定查询的条件例如用户ID或用户名
	 * @param string $field 要查询的字段，默认为'*'表示查询所有字段
	 *                      在只需要查询特定字段时，可以通过此参数指定，优化查询性能
	 *
	 * @return mixed 返回查询到的用户信息，如果没有找到匹配的记录则返回null
	 *               具体返回类型是一个关联数组，包含用户的相关字段和值
	 *
	 * @throws Exception 如果查询过程中发生错误，例如数据库连接失败或查询语句错误，
	 *                   会抛出异常，需要在调用此方法的代码中进行异常处理
	 */
	public static function getUserByWhere($where, string $field = '*')
	{
	    // 使用ORM方式从Users模型中查询数据，指定查询条件和字段
	    return \app\model\Administrator::where($where)
	        ->field($field)
	        ->find();
	}
}